home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1999 July: Mac OS SDK / Dev.CD Jul 99 SDK1.toast / Development Kits / Mac OS / QuickDraw3D 1.6 SDK / Mac Interfaces / CIncludes / QD3DIO.h < prev    next >
Encoding:
C/C++ Source or Header  |  1999-05-18  |  23.8 KB  |  814 lines  |  [TEXT/MPS ]

  1. /*
  2.      File:        QD3DIO.h
  3.  
  4.      Contains:    QuickDraw 3D IO API                                                
  5.  
  6.      Version:    Technology:    Quickdraw 3D 1.6
  7.                  Release:    QuickTime 4.0
  8.  
  9.      Copyright:    © 1995-1999 by Apple Computer, Inc., all rights reserved.
  10.  
  11.      Bugs?:        For bug reports, consult the following page on
  12.                  the World Wide Web:
  13.  
  14.                      http://developer.apple.com/bugreporter/
  15.  
  16. */
  17. #ifndef __QD3DIO__
  18. #define __QD3DIO__
  19.  
  20. #ifndef __QD3D__
  21. #include <QD3D.h>
  22. #endif
  23.  
  24. #ifndef __QD3DDRAWCONTEXT__
  25. #include <QD3DDrawContext.h>
  26. #endif
  27. #ifndef __QD3DVIEW__
  28. #include <QD3DView.h>
  29. #endif
  30.  
  31.  
  32.  
  33. #if PRAGMA_ONCE
  34. #pragma once
  35. #endif
  36.  
  37. #ifdef __cplusplus
  38. extern "C" {
  39. #endif
  40.  
  41. #if PRAGMA_IMPORT
  42. #pragma import on
  43. #endif
  44.  
  45. #if PRAGMA_STRUCT_ALIGN
  46.     #pragma options align=power
  47. #elif PRAGMA_STRUCT_PACKPUSH
  48.     #pragma pack(push, 2)
  49. #elif PRAGMA_STRUCT_PACK
  50.     #pragma pack(2)
  51. #endif
  52.  
  53. #if PRAGMA_ENUM_ALWAYSINT
  54.     #pragma enumsalwaysint on
  55. #elif PRAGMA_ENUM_OPTIONS
  56.     #pragma option enum=int
  57. #elif PRAGMA_ENUM_PACK
  58.     #if __option(pack_enums)
  59.         #define PRAGMA_ENUM_PACK__QD3DIO__
  60.     #endif
  61.     #pragma options(!pack_enums)
  62. #endif
  63.  
  64. /******************************************************************************
  65.  **                                                                              **
  66.  **                                    Basic Types                                 **                                                    
  67.  **                                                                              **
  68.  *****************************************************************************/
  69. typedef unsigned char                     TQ3Uns8;
  70. typedef signed char                     TQ3Int8;
  71. typedef unsigned short                     TQ3Uns16;
  72. typedef signed short                     TQ3Int16;
  73. typedef unsigned long                     TQ3Uns32;
  74. typedef signed long                     TQ3Int32;
  75. #if TARGET_RT_BIG_ENDIAN
  76.  
  77. struct TQ3Uns64 {
  78.     unsigned long                     hi;
  79.     unsigned long                     lo;
  80. };
  81. typedef struct TQ3Uns64                    TQ3Uns64;
  82.  
  83. struct TQ3Int64 {
  84.     signed long                     hi;
  85.     unsigned long                     lo;
  86. };
  87. typedef struct TQ3Int64                    TQ3Int64;
  88. #else
  89.  
  90. struct TQ3Uns64 {
  91.     unsigned long                     lo;
  92.     unsigned long                     hi;
  93. };
  94. typedef struct TQ3Uns64                    TQ3Uns64;
  95.  
  96. struct TQ3Int64 {
  97.     unsigned long                     lo;
  98.     signed long                     hi;
  99. };
  100. typedef struct TQ3Int64                    TQ3Int64;
  101. #endif  /* TARGET_RT_BIG_ENDIAN */
  102.  
  103.  
  104. typedef float                             TQ3Float32;
  105. typedef double                             TQ3Float64;
  106. typedef TQ3Uns32                         TQ3Size;
  107. /******************************************************************************
  108.  **                                                                              **
  109.  **                                    File Types                                 **
  110.  **                                                                              **
  111.  *****************************************************************************/
  112.  
  113. enum TQ3FileModeMasks {
  114.     kQ3FileModeNormal            = 0,
  115.     kQ3FileModeStream            = 1 << 0,
  116.     kQ3FileModeDatabase            = 1 << 1,
  117.     kQ3FileModeText                = 1 << 2
  118. };
  119. typedef enum TQ3FileModeMasks TQ3FileModeMasks;
  120.  
  121. typedef unsigned long                     TQ3FileMode;
  122. /******************************************************************************
  123.  **                                                                              **
  124.  **                                    Method Types                             **
  125.  **                                                                              **
  126.  *****************************************************************************/
  127. /*
  128.  *    IO Methods
  129.  *
  130.  *    The IO system treats all objects as groups of typed information.
  131.  *    When you register your element or attribute, the "elementType" is the 
  132.  *    binary type of your object, the "elementName" the ascii type.
  133.  *    
  134.  *    All objects in the metafile are made up of a "root" or parent object which
  135.  *    defines the instantiated object type. You may define the format of your 
  136.  *    data any way you wish as long as you use the primitives types above and the
  137.  *    routines below.
  138.  *
  139.  *    Root Objects are often appended with additional child objects, called 
  140.  *    subobjects. You may append your object with other QuickDraw 3D objects.
  141.  *    
  142.  *    Writing is straightforward: an object traverses itself any other objects 
  143.  *    that make it up, then writes its own data. Writing uses two methods: 
  144.  *    TQ3XObjectTraverseMethod and TQ3XObjectWriteMethod.
  145.  *
  146.  *    The TQ3XObjectTraverseMethod method should:
  147.  *    + First, Determine if the data should be written 
  148.  *        - if you don't want to write out your object after examining your
  149.  *            data, return kQ3Success in your Traverse method without calling
  150.  *            any other submit calls.
  151.  *     + Next, calculate the size of your object on disk
  152.  *     + Gather whatever state from the view you need to preserve
  153.  *         - you may access the view state NOW, as the state of the
  154.  *             view duing your TQ3XObjectWriteMethod will not be valid. You may
  155.  *             pass a temporary buffer to your write method.
  156.  *     + Submit your view write data using Q3View_SubmitWriteData
  157.  *         - note that you MUST call this before any other "_Submit" call.
  158.  *         - you may pass in a "deleteMethod" for your data. This method
  159.  *             will be called whether or not your write method succeeds or fails.
  160.  *     + Submit your subobjects to the view
  161.  *     
  162.  *     The TQ3XObjectWriteMethod method should:
  163.  *     + Write your data format to the file using the primitives routines below.
  164.  *         - If you passed a "deleteMethod" in your Q3View_SubmitWriteData, that
  165.  *             method will be called upon exit of your write method.
  166.  *
  167.  *    Reading is less straightforward because your root object and
  168.  *    any subobjects must be read inside of your TQ3XObjectReadDataMethod. There 
  169.  *    is an implicit state contained in the file while reading, which you must 
  170.  *    be aware of. When you first enter the read method, you must physically 
  171.  *    read in your data format using the primitives routines until
  172.  *    
  173.  *    Q3File_IsEndOfData(file) == kQ3True
  174.  *    
  175.  *    Generally, your data format should be self-descriptive such that you do not
  176.  *    need to call Q3File_IsEndOfData to determine if you are done reading. 
  177.  *    However, this call is useful for determining zero-sized object or 
  178.  *    determining the end of an object's data.
  179.  *    
  180.  *    Once you have read in all the data, you may collect subobjects. A metafile
  181.  *    object ONLY has subobjects if it is in a container. The call
  182.  *    
  183.  *    Q3File_IsEndOfContainer(file)
  184.  *    
  185.  *    returns kQ3False if subobjects exist, and kQ3True if subobjects do not 
  186.  *    exist.
  187.  *    
  188.  *    At this point, you may use
  189.  *    
  190.  *    Q3File_GetNextObjectType
  191.  *    Q3File_IsNextObjectOfType
  192.  *    Q3File_ReadObject
  193.  *    Q3File_SkipObject
  194.  *    
  195.  *    to iterate through the subobjects until Q3File_IsEndOfContainer(file) 
  196.  *    is kQ3True.
  197.  * 
  198.  */
  199.  
  200. /*
  201.  * IO Methods
  202.  */
  203. enum {
  204.     kQ3XMethodTypeObjectFileVersion = FOUR_CHAR_CODE('vers'),    /* version */
  205.     kQ3XMethodTypeObjectTraverse = FOUR_CHAR_CODE('trvs'),        /* byte count */
  206.     kQ3XMethodTypeObjectTraverseData = FOUR_CHAR_CODE('trvd'),    /* byte count */
  207.     kQ3XMethodTypeObjectWrite    = FOUR_CHAR_CODE('writ'),        /* Dump info to file */
  208.     kQ3XMethodTypeObjectReadData = FOUR_CHAR_CODE('rddt'),        /* Read info from file into buffer or, attach read data to parent */
  209.     kQ3XMethodTypeObjectRead    = FOUR_CHAR_CODE('read'),
  210.     kQ3XMethodTypeObjectAttach    = FOUR_CHAR_CODE('attc')
  211. };
  212.  
  213. /*
  214.  *    TQ3XObjectTraverseMethod
  215.  *
  216.  *    For "elements" (meaning "attributes, too), you will be passed NULL for 
  217.  *    object. Sorry, custom objects will be available in the next major revision.
  218.  *
  219.  *    The "data" is a pointer to your internal element data.
  220.  *
  221.  *    The view is the current traversal view.
  222.  */
  223. typedef CALLBACK_API_C( TQ3Status , TQ3XObjectTraverseMethod )(TQ3Object object, void *data, TQ3ViewObject view);
  224. /*
  225.  *  TQ3XObjectTraverseDataMethod
  226.  */
  227. typedef CALLBACK_API_C( TQ3Status , TQ3XObjectTraverseDataMethod )(TQ3Object object, void *data, TQ3ViewObject view);
  228. /*
  229.  *  TQ3XObjectWriteMethod
  230.  */
  231. typedef CALLBACK_API_C( TQ3Status , TQ3XObjectWriteMethod )(const void *object, TQ3FileObject theFile);
  232. /*
  233.  *  Custom object writing 
  234.  */
  235. typedef CALLBACK_API_C( void , TQ3XDataDeleteMethod )(void *data);
  236. EXTERN_API_C( TQ3Status )
  237. Q3XView_SubmitWriteData            (TQ3ViewObject             view,
  238.                                  TQ3Size                 size,
  239.                                  void *                    data,
  240.                                  TQ3XDataDeleteMethod     deleteData);
  241.  
  242. EXTERN_API_C( TQ3Status )
  243. Q3XView_SubmitSubObjectData        (TQ3ViewObject             view,
  244.                                  TQ3XObjectClass         objectClass,
  245.                                  unsigned long             size,
  246.                                  void *                    data,
  247.                                  TQ3XDataDeleteMethod     deleteData);
  248.  
  249. /*
  250.  *  TQ3XObjectReadMethod
  251.  */
  252. typedef CALLBACK_API_C( TQ3Object , TQ3XObjectReadMethod )(TQ3FileObject theFile);
  253. /*
  254.  *    TQ3XObjectReadDataMethod
  255.  *
  256.  *  For "elements" (meaning "attributes", too), you must allocate stack space 
  257.  *    and call Q3Set_Add on "parentObject", which is an TQ3SetObject.
  258.  *
  259.  *    Otherwise, parentObject is whatever object your element is a subobject of...
  260.  */
  261. typedef CALLBACK_API_C( TQ3Status , TQ3XObjectReadDataMethod )(TQ3Object parentObject, TQ3FileObject theFile);
  262. /*
  263.  *  TQ3XObjectAttachMethod
  264.  */
  265. typedef CALLBACK_API_C( TQ3Status , TQ3XObjectAttachMethod )(TQ3Object childObject, TQ3Object parentObject);
  266.  
  267.  
  268. /******************************************************************************
  269.  **                                                                              **
  270.  **                                Versioning                                     **
  271.  **                                                                              **
  272.  *****************************************************************************/
  273.  
  274. #define Q3FileVersion(majorVersion, minorVersion)    (TQ3FileVersion) \
  275.     ((((TQ3Uns32) majorVersion & 0xFFFF) << 16) | ((TQ3Uns32) minorVersion & 0xFFFF))
  276.  
  277. typedef unsigned long                     TQ3FileVersion;
  278. #define kQ3FileVersionCurrent    Q3FileVersion(1,6)
  279.  
  280. /******************************************************************************
  281.  **                                                                              **
  282.  **                                File Routines                                 **
  283.  **                                                                              **
  284.  *****************************************************************************/
  285. /*
  286.  * Creation and accessors
  287.  */
  288. EXTERN_API_C( TQ3FileObject )
  289. Q3File_New                        (void);
  290.  
  291. EXTERN_API_C( TQ3Status )
  292. Q3File_GetStorage                (TQ3FileObject             theFile,
  293.                                  TQ3StorageObject *        storage);
  294.  
  295. EXTERN_API_C( TQ3Status )
  296. Q3File_SetStorage                (TQ3FileObject             theFile,
  297.                                  TQ3StorageObject         storage);
  298.  
  299. /*
  300.  * Opening, and accessing "open" state, closing/cancelling
  301.  */
  302. EXTERN_API_C( TQ3Status )
  303. Q3File_OpenRead                    (TQ3FileObject             theFile,
  304.                                  TQ3FileMode *            mode);
  305.  
  306. EXTERN_API_C( TQ3Status )
  307. Q3File_OpenWrite                (TQ3FileObject             theFile,
  308.                                  TQ3FileMode             mode);
  309.  
  310. EXTERN_API_C( TQ3Status )
  311. Q3File_IsOpen                    (TQ3FileObject             theFile,
  312.                                  TQ3Boolean *            isOpen);
  313.  
  314. EXTERN_API_C( TQ3Status )
  315. Q3File_GetMode                    (TQ3FileObject             theFile,
  316.                                  TQ3FileMode *            mode);
  317.  
  318. EXTERN_API_C( TQ3Status )
  319. Q3File_GetVersion                (TQ3FileObject             theFile,
  320.                                  TQ3FileVersion *        version);
  321.  
  322. EXTERN_API_C( TQ3Status )
  323. Q3File_Close                    (TQ3FileObject             theFile);
  324.  
  325. EXTERN_API_C( TQ3Status )
  326. Q3File_Cancel                    (TQ3FileObject             theFile);
  327.  
  328. /*
  329.  * Writing (Application)
  330.  */
  331. EXTERN_API_C( TQ3Status )
  332. Q3View_StartWriting                (TQ3ViewObject             view,
  333.                                  TQ3FileObject             theFile);
  334.  
  335. EXTERN_API_C( TQ3ViewStatus )
  336. Q3View_EndWriting                (TQ3ViewObject             view);
  337.  
  338. /*
  339.  * Reading (Application)
  340.  */
  341. EXTERN_API_C( TQ3ObjectType )
  342. Q3File_GetNextObjectType        (TQ3FileObject             theFile);
  343.  
  344. EXTERN_API_C( TQ3Boolean )
  345. Q3File_IsNextObjectOfType        (TQ3FileObject             theFile,
  346.                                  TQ3ObjectType             ofType);
  347.  
  348. EXTERN_API_C( TQ3Object )
  349. Q3File_ReadObject                (TQ3FileObject             theFile);
  350.  
  351. EXTERN_API_C( TQ3Status )
  352. Q3File_SkipObject                (TQ3FileObject             theFile);
  353.  
  354. EXTERN_API_C( TQ3Boolean )
  355. Q3File_IsEndOfData                (TQ3FileObject             theFile);
  356.  
  357. EXTERN_API_C( TQ3Boolean )
  358. Q3File_IsEndOfContainer            (TQ3FileObject             theFile,
  359.                                  TQ3Object                 rootObject);
  360.  
  361. EXTERN_API_C( TQ3Boolean )
  362. Q3File_IsEndOfFile                (TQ3FileObject             theFile);
  363.  
  364. /*    
  365.  *  External file references
  366.  */
  367. EXTERN_API_C( TQ3Status )
  368. Q3File_MarkAsExternalReference    (TQ3FileObject             theFile,
  369.                                  TQ3SharedObject         sharedObject);
  370.  
  371. EXTERN_API_C( TQ3GroupObject )
  372. Q3File_GetExternalReferences    (TQ3FileObject             theFile);
  373.  
  374. /*    
  375.  *  Tracking editing in read-in objects with custom elements
  376.  */
  377. EXTERN_API_C( TQ3Status )
  378. Q3Shared_ClearEditTracking        (TQ3SharedObject         sharedObject);
  379.  
  380. EXTERN_API_C( TQ3Boolean )
  381. Q3Shared_GetEditTrackingState    (TQ3SharedObject         sharedObject);
  382.  
  383. /*    
  384.  *  Reading objects inside a group one-by-one
  385.  */
  386.  
  387. enum TQ3FileReadGroupStateMasks {
  388.     kQ3FileReadWholeGroup        = 0,
  389.     kQ3FileReadObjectsInGroup    = 1 << 0,
  390.     kQ3FileCurrentlyInsideGroup    = 1 << 1
  391. };
  392. typedef enum TQ3FileReadGroupStateMasks TQ3FileReadGroupStateMasks;
  393.  
  394. typedef unsigned long                     TQ3FileReadGroupState;
  395. EXTERN_API_C( TQ3Status )
  396. Q3File_SetReadInGroup            (TQ3FileObject             theFile,
  397.                                  TQ3FileReadGroupState     readGroupState);
  398.  
  399. EXTERN_API_C( TQ3Status )
  400. Q3File_GetReadInGroup            (TQ3FileObject             theFile,
  401.                                  TQ3FileReadGroupState * readGroupState);
  402.  
  403.  
  404. /*
  405.  * Idling
  406.  */
  407. typedef CALLBACK_API_C( TQ3Status , TQ3FileIdleMethod )(TQ3FileObject theFile, const void *idlerData);
  408. EXTERN_API_C( TQ3Status )
  409. Q3File_SetIdleMethod            (TQ3FileObject             theFile,
  410.                                  TQ3FileIdleMethod         idle,
  411.                                  const void *            idleData);
  412.  
  413.  
  414. /******************************************************************************
  415.  **                                                                              **
  416.  **                                Primitives Routines                             **
  417.  **                                                                              **
  418.  *****************************************************************************/
  419. EXTERN_API_C( TQ3Status )
  420. Q3NewLine_Write                    (TQ3FileObject             theFile);
  421.  
  422. EXTERN_API_C( TQ3Status )
  423. Q3Uns8_Read                        (TQ3Uns8 *                data,
  424.                                  TQ3FileObject             theFile);
  425.  
  426. EXTERN_API_C( TQ3Status )
  427. Q3Uns8_Write                    (TQ3Uns8                 data,
  428.                                  TQ3FileObject             theFile);
  429.  
  430. EXTERN_API_C( TQ3Status )
  431. Q3Uns16_Read                    (TQ3Uns16 *                data,
  432.                                  TQ3FileObject             theFile);
  433.  
  434. EXTERN_API_C( TQ3Status )
  435. Q3Uns16_Write                    (TQ3Uns16                 data,
  436.                                  TQ3FileObject             theFile);
  437.  
  438. EXTERN_API_C( TQ3Status )
  439. Q3Uns32_Read                    (TQ3Uns32 *                data,
  440.                                  TQ3FileObject             theFile);
  441.  
  442. EXTERN_API_C( TQ3Status )
  443. Q3Uns32_Write                    (TQ3Uns32                 data,
  444.                                  TQ3FileObject             theFile);
  445.  
  446. EXTERN_API_C( TQ3Status )
  447. Q3Int8_Read                        (TQ3Int8 *                data,
  448.                                  TQ3FileObject             theFile);
  449.  
  450. EXTERN_API_C( TQ3Status )
  451. Q3Int8_Write                    (TQ3Int8                 data,
  452.                                  TQ3FileObject             theFile);
  453.  
  454. EXTERN_API_C( TQ3Status )
  455. Q3Int16_Read                    (TQ3Int16 *                data,
  456.                                  TQ3FileObject             theFile);
  457.  
  458. EXTERN_API_C( TQ3Status )
  459. Q3Int16_Write                    (TQ3Int16                 data,
  460.                                  TQ3FileObject             theFile);
  461.  
  462. EXTERN_API_C( TQ3Status )
  463. Q3Int32_Read                    (TQ3Int32 *                data,
  464.                                  TQ3FileObject             theFile);
  465.  
  466. EXTERN_API_C( TQ3Status )
  467. Q3Int32_Write                    (TQ3Int32                 data,
  468.                                  TQ3FileObject             theFile);
  469.  
  470. EXTERN_API_C( TQ3Status )
  471. Q3Uns64_Read                    (TQ3Uns64 *                data,
  472.                                  TQ3FileObject             theFile);
  473.  
  474. EXTERN_API_C( TQ3Status )
  475. Q3Uns64_Write                    (TQ3Uns64                 data,
  476.                                  TQ3FileObject             theFile);
  477.  
  478. EXTERN_API_C( TQ3Status )
  479. Q3Int64_Read                    (TQ3Int64 *                data,
  480.                                  TQ3FileObject             theFile);
  481.  
  482. EXTERN_API_C( TQ3Status )
  483. Q3Int64_Write                    (TQ3Int64                 data,
  484.                                  TQ3FileObject             theFile);
  485.  
  486. EXTERN_API_C( TQ3Status )
  487. Q3Float32_Read                    (TQ3Float32 *            data,
  488.                                  TQ3FileObject             theFile);
  489.  
  490. EXTERN_API_C( TQ3Status )
  491. Q3Float32_Write                    (TQ3Float32             data,
  492.                                  TQ3FileObject             theFile);
  493.  
  494. EXTERN_API_C( TQ3Status )
  495. Q3Float64_Read                    (TQ3Float64 *            data,
  496.                                  TQ3FileObject             theFile);
  497.  
  498. EXTERN_API_C( TQ3Status )
  499. Q3Float64_Write                    (TQ3Float64             data,
  500.                                  TQ3FileObject             theFile);
  501.  
  502. EXTERN_API_C( TQ3Size )
  503. Q3Size_Pad                        (TQ3Size                 size);
  504.  
  505. /*
  506.  * Pass a pointer to a buffer of kQ3StringMaximumLength bytes
  507.  */
  508. EXTERN_API_C( TQ3Status )
  509. Q3String_Read                    (char *                    data,
  510.                                  unsigned long *        length,
  511.                                  TQ3FileObject             theFile);
  512.  
  513. EXTERN_API_C( TQ3Status )
  514. Q3String_Write                    (const char *            data,
  515.                                  TQ3FileObject             theFile);
  516.  
  517. /* 
  518.  * This call will read Q3Size_Pad(size) bytes,
  519.  *    but only place size bytes into data.
  520.  */
  521. EXTERN_API_C( TQ3Status )
  522. Q3RawData_Read                    (unsigned char *        data,
  523.                                  unsigned long             size,
  524.                                  TQ3FileObject             theFile);
  525.  
  526. /* 
  527.  * This call will write Q3Size_Pad(size) bytes,
  528.  *    adding 0's to pad to the nearest 4 byte boundary.
  529.  */
  530. EXTERN_API_C( TQ3Status )
  531. Q3RawData_Write                    (const unsigned char *    data,
  532.                                  unsigned long             size,
  533.                                  TQ3FileObject             theFile);
  534.  
  535. /******************************************************************************
  536.  **                                                                              **
  537.  **                        Convenient Primitives Routines                         **
  538.  **                                                                              **
  539.  *****************************************************************************/
  540. EXTERN_API_C( TQ3Status )
  541. Q3Point2D_Read                    (TQ3Point2D *            point2D,
  542.                                  TQ3FileObject             theFile);
  543.  
  544. EXTERN_API_C( TQ3Status )
  545. Q3Point2D_Write                    (const TQ3Point2D *        point2D,
  546.                                  TQ3FileObject             theFile);
  547.  
  548. EXTERN_API_C( TQ3Status )
  549. Q3Point3D_Read                    (TQ3Point3D *            point3D,
  550.                                  TQ3FileObject             theFile);
  551.  
  552. EXTERN_API_C( TQ3Status )
  553. Q3Point3D_Write                    (const TQ3Point3D *        point3D,
  554.                                  TQ3FileObject             theFile);
  555.  
  556. EXTERN_API_C( TQ3Status )
  557. Q3RationalPoint3D_Read            (TQ3RationalPoint3D *    point3D,
  558.                                  TQ3FileObject             theFile);
  559.  
  560. EXTERN_API_C( TQ3Status )
  561. Q3RationalPoint3D_Write            (const TQ3RationalPoint3D * point3D,
  562.                                  TQ3FileObject             theFile);
  563.  
  564. EXTERN_API_C( TQ3Status )
  565. Q3RationalPoint4D_Read            (TQ3RationalPoint4D *    point4D,
  566.                                  TQ3FileObject             theFile);
  567.  
  568. EXTERN_API_C( TQ3Status )
  569. Q3RationalPoint4D_Write            (const TQ3RationalPoint4D * point4D,
  570.                                  TQ3FileObject             theFile);
  571.  
  572. EXTERN_API_C( TQ3Status )
  573. Q3Vector2D_Read                    (TQ3Vector2D *            vector2D,
  574.                                  TQ3FileObject             theFile);
  575.  
  576. EXTERN_API_C( TQ3Status )
  577. Q3Vector2D_Write                (const TQ3Vector2D *    vector2D,
  578.                                  TQ3FileObject             theFile);
  579.  
  580. EXTERN_API_C( TQ3Status )
  581. Q3Vector3D_Read                    (TQ3Vector3D *            vector3D,
  582.                                  TQ3FileObject             theFile);
  583.  
  584. EXTERN_API_C( TQ3Status )
  585. Q3Vector3D_Write                (const TQ3Vector3D *    vector3D,
  586.                                  TQ3FileObject             theFile);
  587.  
  588. EXTERN_API_C( TQ3Status )
  589. Q3Matrix4x4_Read                (TQ3Matrix4x4 *            matrix4x4,
  590.                                  TQ3FileObject             theFile);
  591.  
  592. EXTERN_API_C( TQ3Status )
  593. Q3Matrix4x4_Write                (const TQ3Matrix4x4 *    matrix4x4,
  594.                                  TQ3FileObject             theFile);
  595.  
  596. EXTERN_API_C( TQ3Status )
  597. Q3Tangent2D_Read                (TQ3Tangent2D *            tangent2D,
  598.                                  TQ3FileObject             theFile);
  599.  
  600. EXTERN_API_C( TQ3Status )
  601. Q3Tangent2D_Write                (const TQ3Tangent2D *    tangent2D,
  602.                                  TQ3FileObject             theFile);
  603.  
  604. EXTERN_API_C( TQ3Status )
  605. Q3Tangent3D_Read                (TQ3Tangent3D *            tangent3D,
  606.                                  TQ3FileObject             theFile);
  607.  
  608. EXTERN_API_C( TQ3Status )
  609. Q3Tangent3D_Write                (const TQ3Tangent3D *    tangent3D,
  610.                                  TQ3FileObject             theFile);
  611.  
  612. /*    This call affects only text Files - it is a no-op in binary files */
  613. EXTERN_API_C( TQ3Status )
  614. Q3Comment_Write                    (char *                    comment,
  615.                                  TQ3FileObject             theFile);
  616.  
  617. /******************************************************************************
  618.  **                                                                              **
  619.  **                                Unknown Object                                 **
  620.  **                                                                              **
  621.  **        Unknown objects are generated when reading files which contain         **
  622.  **        custom data which has not been registered in the current             **
  623.  **        instantiation of QuickDraw 3D.                                         **
  624.  **                                                                              **
  625.  *****************************************************************************/
  626. EXTERN_API_C( TQ3ObjectType )
  627. Q3Unknown_GetType                (TQ3UnknownObject         unknownObject);
  628.  
  629. EXTERN_API_C( TQ3Status )
  630. Q3Unknown_GetDirtyState            (TQ3UnknownObject         unknownObject,
  631.                                  TQ3Boolean *            isDirty);
  632.  
  633. EXTERN_API_C( TQ3Status )
  634. Q3Unknown_SetDirtyState            (TQ3UnknownObject         unknownObject,
  635.                                  TQ3Boolean             isDirty);
  636.  
  637.  
  638. /******************************************************************************
  639.  **                                                                              **
  640.  **                            Unknown Text Routines                             **
  641.  **                                                                              **
  642.  *****************************************************************************/
  643.  
  644. struct TQ3UnknownTextData {
  645.     char *                            objectName;                    /* '\0' terminated */
  646.     char *                            contents;                    /* '\0' terminated */
  647. };
  648. typedef struct TQ3UnknownTextData        TQ3UnknownTextData;
  649. EXTERN_API_C( TQ3Status )
  650. Q3UnknownText_GetData            (TQ3UnknownObject         unknownObject,
  651.                                  TQ3UnknownTextData *    unknownTextData);
  652.  
  653. EXTERN_API_C( TQ3Status )
  654. Q3UnknownText_EmptyData            (TQ3UnknownTextData *    unknownTextData);
  655.  
  656.  
  657. /******************************************************************************
  658.  **                                                                              **
  659.  **                            Unknown Binary Routines                             **
  660.  **                                                                              **
  661.  *****************************************************************************/
  662.  
  663. struct TQ3UnknownBinaryData {
  664.     TQ3ObjectType                     objectType;
  665.     unsigned long                     size;
  666.     TQ3Endian                         byteOrder;
  667.     char *                            contents;
  668. };
  669. typedef struct TQ3UnknownBinaryData        TQ3UnknownBinaryData;
  670. EXTERN_API_C( TQ3Status )
  671. Q3UnknownBinary_GetData            (TQ3UnknownObject         unknownObject,
  672.                                  TQ3UnknownBinaryData *    unknownBinaryData);
  673.  
  674. EXTERN_API_C( TQ3Status )
  675. Q3UnknownBinary_EmptyData        (TQ3UnknownBinaryData *    unknownBinaryData);
  676.  
  677.  
  678. EXTERN_API_C( TQ3Status )
  679. Q3UnknownBinary_GetTypeString    (TQ3UnknownObject         unknownObject,
  680.                                  char **                typeString);
  681.  
  682. EXTERN_API_C( TQ3Status )
  683. Q3UnknownBinary_EmptyTypeString    (char **                typeString);
  684.  
  685. /******************************************************************************
  686.  **                                                                              **
  687.  **                            ViewHints routines                                 **
  688.  **                                                                              **
  689.  **        ViewHints are an object in a metafile to give you some hints on how     **
  690.  **        to render a scene.    You may create a view with any of the objects     **
  691.  **        retrieved from it, or you can just throw it away.                     **
  692.  **                                                                              **
  693.  **        To write a view hints to a file, create a view hints object from a     **
  694.  **        view and write the view hints.                                         **
  695.  **                                                                              **
  696.  *****************************************************************************/
  697. EXTERN_API_C( TQ3ViewHintsObject )
  698. Q3ViewHints_New                    (TQ3ViewObject             view);
  699.  
  700. EXTERN_API_C( TQ3Status )
  701. Q3ViewHints_SetRenderer            (TQ3ViewHintsObject     viewHints,
  702.                                  TQ3RendererObject         renderer);
  703.  
  704. EXTERN_API_C( TQ3Status )
  705. Q3ViewHints_GetRenderer            (TQ3ViewHintsObject     viewHints,
  706.                                  TQ3RendererObject *    renderer);
  707.  
  708. EXTERN_API_C( TQ3Status )
  709. Q3ViewHints_SetCamera            (TQ3ViewHintsObject     viewHints,
  710.                                  TQ3CameraObject         camera);
  711.  
  712. EXTERN_API_C( TQ3Status )
  713. Q3ViewHints_GetCamera            (TQ3ViewHintsObject     viewHints,
  714.                                  TQ3CameraObject *        camera);
  715.  
  716. EXTERN_API_C( TQ3Status )
  717. Q3ViewHints_SetLightGroup        (TQ3ViewHintsObject     viewHints,
  718.                                  TQ3GroupObject         lightGroup);
  719.  
  720. EXTERN_API_C( TQ3Status )
  721. Q3ViewHints_GetLightGroup        (TQ3ViewHintsObject     viewHints,
  722.                                  TQ3GroupObject *        lightGroup);
  723.  
  724. EXTERN_API_C( TQ3Status )
  725. Q3ViewHints_SetAttributeSet        (TQ3ViewHintsObject     viewHints,
  726.                                  TQ3AttributeSet         attributeSet);
  727.  
  728. EXTERN_API_C( TQ3Status )
  729. Q3ViewHints_GetAttributeSet        (TQ3ViewHintsObject     viewHints,
  730.                                  TQ3AttributeSet *        attributeSet);
  731.  
  732. EXTERN_API_C( TQ3Status )
  733. Q3ViewHints_SetDimensionsState    (TQ3ViewHintsObject     viewHints,
  734.                                  TQ3Boolean             isValid);
  735.  
  736. EXTERN_API_C( TQ3Status )
  737. Q3ViewHints_GetDimensionsState    (TQ3ViewHintsObject     viewHints,
  738.                                  TQ3Boolean *            isValid);
  739.  
  740. EXTERN_API_C( TQ3Status )
  741. Q3ViewHints_SetDimensions        (TQ3ViewHintsObject     viewHints,
  742.                                  unsigned long             width,
  743.                                  unsigned long             height);
  744.  
  745. EXTERN_API_C( TQ3Status )
  746. Q3ViewHints_GetDimensions        (TQ3ViewHintsObject     viewHints,
  747.                                  unsigned long *        width,
  748.                                  unsigned long *        height);
  749.  
  750. EXTERN_API_C( TQ3Status )
  751. Q3ViewHints_SetMaskState        (TQ3ViewHintsObject     viewHints,
  752.                                  TQ3Boolean             isValid);
  753.  
  754. EXTERN_API_C( TQ3Status )
  755. Q3ViewHints_GetMaskState        (TQ3ViewHintsObject     viewHints,
  756.                                  TQ3Boolean *            isValid);
  757.  
  758. EXTERN_API_C( TQ3Status )
  759. Q3ViewHints_SetMask                (TQ3ViewHintsObject     viewHints,
  760.                                  const TQ3Bitmap *        mask);
  761.  
  762. EXTERN_API_C( TQ3Status )
  763. Q3ViewHints_GetMask                (TQ3ViewHintsObject     viewHints,
  764.                                  TQ3Bitmap *            mask);
  765.  
  766. /* Call Q3Bitmap_Empty when done with the mask    */
  767. EXTERN_API_C( TQ3Status )
  768. Q3ViewHints_SetClearImageMethod    (TQ3ViewHintsObject     viewHints,
  769.                                  TQ3DrawContextClearImageMethod  clearMethod);
  770.  
  771. EXTERN_API_C( TQ3Status )
  772. Q3ViewHints_GetClearImageMethod    (TQ3ViewHintsObject     viewHints,
  773.                                  TQ3DrawContextClearImageMethod * clearMethod);
  774.  
  775. EXTERN_API_C( TQ3Status )
  776. Q3ViewHints_SetClearImageColor    (TQ3ViewHintsObject     viewHints,
  777.                                  const TQ3ColorARGB *    color);
  778.  
  779. EXTERN_API_C( TQ3Status )
  780. Q3ViewHints_GetClearImageColor    (TQ3ViewHintsObject     viewHints,
  781.                                  TQ3ColorARGB *            color);
  782.  
  783.  
  784.  
  785.  
  786. #if PRAGMA_ENUM_ALWAYSINT
  787.     #pragma enumsalwaysint reset
  788. #elif PRAGMA_ENUM_OPTIONS
  789.     #pragma option enum=reset
  790. #elif defined(PRAGMA_ENUM_PACK__QD3DIO__)
  791.     #pragma options(pack_enums)
  792. #endif
  793.  
  794. #if PRAGMA_STRUCT_ALIGN
  795.     #pragma options align=reset
  796. #elif PRAGMA_STRUCT_PACKPUSH
  797.     #pragma pack(pop)
  798. #elif PRAGMA_STRUCT_PACK
  799.     #pragma pack()
  800. #endif
  801.  
  802. #ifdef PRAGMA_IMPORT_OFF
  803. #pragma import off
  804. #elif PRAGMA_IMPORT
  805. #pragma import reset
  806. #endif
  807.  
  808. #ifdef __cplusplus
  809. }
  810. #endif
  811.  
  812. #endif /* __QD3DIO__ */
  813.  
  814.